import requests
import re
import os
#综合修改自_4_及_6_
#2021.04.20 10：08
#爬取1920*1080图片
#网站为2层嵌套，第一层为预览图，前缀为small，第二层为1920*1080p图片。
#这是_6_netbianForWindows2.py
#2021-05-07 16:04想把它打包成可执行文件。
def main():
    url="http://www.netbian.com"
    headers={"User-Agent":"Mozilla/5.0 (X11; CrOS armv7l 13597.84.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.187 Safari/537.36",
             "referer":"http://www.netbian.com/",
             "connection":"keep-alive"}
    #[1]以下为创建用于存放本案例的主文件夹，如果不存在该文件夹则创建文件夹。
    mainFileDir=f".\\pypic6"
    if os.path.exists(mainFileDir):
        pass
    else:
        os.mkdir(mainFileDir)
    #------------------------------------------------------------------------
    #[2]开始从www.netbian.com的主页上获取网页信息。
    urlFile=mainFileDir+"\_6_netbian.txt"
    #以GET的方式获取请求。
    r=requests.get(url,headers=headers)
    f=open(urlFile,"wb")
    #r.content获取响应内容（字节流）
    f.write(r.content)
    f.close()
    #[3]筛选出高清图片真正的网页地址
    pttn="href=\S*.htm"
    f=open(urlFile,"r",encoding="gbk")
    txt=f.read()
    print(txt)
    jpgHtm=re.findall(pttn,txt)#这个re出来的东西本身就是个List
    f.close()
    print('jpgHtm=',jpgHtm,'\n','jpgHtm个数为：',len(jpgHtm),'\n')
    #[4]过滤掉没用的网站地址
    pttn2="(\/desk\S*.htm)"
    jpgHtm2=re.findall(pttn2,str(jpgHtm))
    print("jpgHtm2=",jpgHtm2,'\n')
    #[5]开始生成真正的高清壁纸的网页响应地址
    for i in range(len(jpgHtm2)):
        jpgHtm2[i]=url+str(jpgHtm2[i])
    print("Real_jpgHtm2=",jpgHtm2)
    ##以上jpgHtm2为真正的高清壁纸的网页响应地址。
    ##---------------------------------------------------------------
    #   原url将被替换为jpgHtm2[x]
    #   原urlFile将被替换为_6_RealNetbian{x}.txt,注意路径名的斜杠别忘了
    #   headers不变
    for i in range(len(jpgHtm2)):
        url=jpgHtm2[i]
        urlFile=mainFileDir+f"\_6_RealNetbian{i}.txt"
        r=requests.get(url,headers=headers)
        f=open(urlFile,"wb")
        #r.content获取响应内容（字节流）
        f.write(r.content)
        f.close()

        pttn="https?\:\/\/img.netbian.com\/\S*.jpg"
        f=open(urlFile,"r",encoding="gbk")
        txt=f.read()
        print(txt)
        jpgResult=re.findall(pttn,txt)#这个re出来的东西本身就是个List
        f.close()
        print('jpgHtm=',jpgResult,'\n','jpgHtm个数为：',len(jpgResult),'\n')

    ##    picDir=mainFileDir+f"/_6_pic{i}"
    ##    for j in range(len(jpgResult)):
    ##        if os.path.exists(picDir):
    ##            pass
    ##        else:
    ##            os.mkdir(picDir)
    ##        url=jpgResult[j]
    ##        r=requests.get(url)
    ##        f=open(picDir+f"/python{j}.jpg","wb")
    ##        f.write(r.content)
    ##        print(f"Pic{i}/{j} is ok."," allFileNumb is",len(jpgHtm2))
    ##        f.close()
    #由上方的观察可得（上方代码可用），一般都是每个文件夹下，第二张图片才为高清图。故修改如下。
        url=jpgResult[1]
        r=requests.get(url)
        f=open(mainFileDir+f"\python1-{i}.jpg","wb")
        f.write(r.content)
        print(f"Pic1-{i} is ok."," allFileNumb is",len(jpgHtm2)-1)
        f.close()
    ##以上为www.netbian.com第1页的操作
    print("第一页已爬取完毕。")
    #------------------------------------------------------------------------
    # 以下开始尝试主页上第n页的操作。
    targetIndex=int(input("请输入3～1209,用于爬取的页数"))   #即下方代码用于爬取 2~targetIndex-1 的图片。
    for x in range(2,targetIndex):#目前该网站有1208页,注意这里的x不要命名为f，否则路径会报错。
        url_index=f"/index_{x}.htm"
        url="http://www.netbian.com"+url_index

        #[2]开始从www.netbian.com的主页上获取网页信息。
        urlFile=mainFileDir+f"\_6_netbian.txt"
        #以GET的方式获取请求。
        r=requests.get(url,headers=headers)
        f=open(urlFile,"wb")
        #r.content获取响应内容（字节流）
        f.write(r.content)
        f.close()
        #[3]筛选出高清图片真正的网页地址
        pttn="href=\S*.htm"
        f=open(urlFile,"r",encoding="gbk")
        txt=f.read()
        print(txt)
        jpgHtm=re.findall(pttn,txt)#这个re出来的东西本身就是个List
        f.close()
        print('jpgHtm=',jpgHtm,'\n','jpgHtm个数为：',len(jpgHtm),'\n')
        #[4]过滤掉没用的网站地址
        pttn2="(\/desk\S*.htm)"
        jpgHtm2=re.findall(pttn2,str(jpgHtm))
        print("jpgHtm2=",jpgHtm2,'\n')
        #[5]开始生成真正的高清壁纸的网页响应地址
        for i in range(len(jpgHtm2)):
            jpgHtm2[i]="http://www.netbian.com"+str(jpgHtm2[i])
        print("Real_jpgHtm2=",jpgHtm2)
        ##以上jpgHtm2为真正的高清壁纸的网页响应地址。
        ##---------------------------------------------------------------
        #   原url将被替换为jpgHtm2[x]
        #   原urlFile将被替换为_6_RealNetbian{x}.txt,注意路径名的斜杠别忘了
        #   headers不变
        for i in range(len(jpgHtm2)):
            url=jpgHtm2[i]
            urlFile=mainFileDir+f"\_6_RealNetbian{x}-{i}.txt"
            r=requests.get(url,headers=headers)
            f=open(urlFile,"wb")
            #r.content获取响应内容（字节流）
            f.write(r.content)
            f.close()

            pttn="https?\:\/\/img.netbian.com\/\S*.jpg"
            f=open(urlFile,"r",encoding="gbk")
            txt=f.read()
            print(txt)
            jpgResult=re.findall(pttn,txt)#这个re出来的东西本身就是个List
            f.close()
            print('jpgHtm=',jpgResult,'\n','jpgHtm个数为：',len(jpgResult),'\n')

        ##    picDir=mainFileDir+f"/_6_pic{i}"
        ##    for j in range(len(jpgResult)):
        ##        if os.path.exists(picDir):
        ##            pass
        ##        else:
        ##            os.mkdir(picDir)
        ##        url=jpgResult[j]
        ##        r=requests.get(url)
        ##        f=open(picDir+f"/python{j}.jpg","wb")
        ##        f.write(r.content)
        ##        print(f"Pic{i}/{j} is ok."," allFileNumb is",len(jpgHtm2))
        ##        f.close()
        #由上方的观察可得（上方代码可用），一般都是每个文件夹下，第二张图片才为高清图。故修改如下。
            url=jpgResult[1]
            r=requests.get(url)
            f=open(mainFileDir+f"\python{x}-{i}.jpg","wb")
            f.write(r.content)
            print(f"Pic{x}-{i} is ok."," allFileNumb is",len(jpgHtm2)-1)
            f.close()
    #--------------------------------------------------------------------------
    #以下代码修改自https://www.cnblogs.com/gqv2009/p/12965307.html
    #用于删除.txt文件。
    file_name=mainFileDir
    for root,dirs,files in os.walk(file_name):
        for name in files:
            if name.endswith(".txt"):
                    os.remove(os.path.join(root,name))
                    print("Delete File:"+os.path.join(root,name))
    print("图片保存在路径",mainFileDir)

if __name__ =='__main__':
    main()
